package br.com.financas.repository;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.financas.abstractions.IReceitaRepository;
import br.com.financas.entity.Receita;
import br.com.financas.entity.Usuario;

public class ReceitaRepository implements IReceitaRepository<Receita> {
	private EntityManager manager;
	private List<Receita> receitaList;

	public ReceitaRepository(EntityManager manager) {
		this.manager = manager;
		receitaList = new ArrayList<Receita>();
	}

	@Override
	public void inserir(Receita receita) {
		try {
			manager.getTransaction().begin();
			manager.persist(receita);
			manager.getTransaction().commit();
		} catch (Exception e) {
			manager.getTransaction().rollback();
		}

	}

	@Override
	public boolean deletar(Receita receita) {
		boolean deletado = true;
		try {
			manager.getTransaction().begin();
			manager.refresh(receita);
			manager.remove(receita);
			manager.getTransaction().commit();
		} catch (Exception e) {
			manager.getTransaction().rollback();
			deletado = false;
		}

		return deletado;
	}

	@Override
	public void atualizar(Receita entity) {
		// TODO Auto-generated method stub

	}

	@Override
	public List<Receita> obterTodos() {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Receita> obterPorUsuario(Usuario usuario) {
		Query query;

		if (this.receitaList.size() == 0) {
			try {
				query = manager.createQuery("SELECT r FROM Receita r WHERE r.conta.usuario = :usuario");
				query.setParameter("usuario", usuario);
				receitaList = query.getResultList();
			} catch (Exception e) {
				manager.getTransaction().rollback();
			}
		}

		return receitaList;
	}

}
